/*
 * menu.h
 *
 *  Created on: May 21, 2025
 *      Author: zxx
 */

#ifndef MENU_H_
#define MENU_H_
struct Option_Class
{
	char *String;		// 选项名字
	void (*func)(void); // 函数指针
	float *Variable;	// 可选变量
	uint8_t StrLen;		// 由于中文占三个字节,用strlen计算名字长度不再准确,故需额外储存名字长度
};
enum CursorStyle
{
	reverse,
	mouse,
	frame,
};
struct MenuProperty
{
	float Cursor_Actual_X;		  // 当前光标位置X
	float Cursor_Actual_Y;		  // 当前光标位置Y
	float Cursor_Actual_W;		  // 当前光标尺寸宽
	float Cursor_Actual_H;		  // 当前光标尺寸高
	enum CursorStyle CursorStyle; // 光标风格;
	float Cursor_ActSpeed;		  // 光标动画速度系数;
	float Slide_ActSpeed;		  // 滚动动画速度系数;
	int8_t Font_Width;			  // 字体宽度
	int8_t Font_Height;			  // 字体宽度
	int8_t Line_Height;			  // 行高
	int8_t Layout_Margin;		  // 页边距

	int8_t Window_X;				// 窗口位置X
	int8_t Window_Y;                // 窗口位置Y
	uint8_t Window_W;               // 窗口宽度
	uint8_t Window_H;               // 窗口高度
};
extern struct MenuProperty Menu_Global;

int menuc1();
void Menu_RunMainMenu(void);
void Menu_RunMenu(struct Option_Class *Option_List);

uint8_t Menu_GetOptionStrLen(char *String);
float Menu_CurveMigration(float Actual_Value, float Target_Value, float Act_Speed);
void Menu_ShowCursor(float Target_Cur_X, float Target_Cur_Y, float Target_Cur_W, float Target_Cur_H, enum CursorStyle CurStyle, float Cur_Act_Speed);

#endif /* MENU_H_ */
